07. 解决方案:条件布尔表达式

练习解决方案:评估复合布尔表达式

altitude < 1000 and speed > 100

altitude < 1000 False ,因此我们甚至不需要检查第二个条件,整个表达式为 False

(propulsion == "Jet" or propulsion == "Turboprop") and speed < 300 and altitude > 20000

propulsion == "Jet" False ,并且 propulsion == "Turboprop" False ,因此括号内的整个表达式为 False 。它使用 and 与另一个表达式相结合,因此我们甚至不需要检查这些表达式,整个表达式肯定为 False ,因为第一部分为 False

not (speed > 400 and propulsion == "Propeller")

要判断这道练习,我们需要首先查看括号里的内容,然后向其应用 not speed > 400 为 False,因为我们使用 and ,这使得括号里的整个表达式为 False 。应用 not 使该表达式变成 True

(altitude > 500 and speed > 100) or not propulsion == "Propeller"

我们先看看括号里的表达式。 altitude > 500 True ,并且 speed 大于 100 ,因此括号里的表达式为 True 。无论其他表达式的值是什么,因为它们是用 or 连接起来的,整个表达式将为 True

这里我们还要介绍一个布尔表达式求值所用的技术—— 短路求值

如果 a = False ,对于 a and b 求值时,将直接得到结果为 False ,不会再对 b 的值做考核,不论它是 True False

如果 a = True ,对于 a or b 求值时,将直接得到结果为 True ,不会再对 b 的值做考核,不论它是 True False

你能思考一下这是为什么吗?

练习解决方案:使用对象的真假值

我们首先设置 prize = None ,如果得分能够获得奖品,则更新 prize 。然后如果有奖品的话,使用 prize 的真假值输出消息,如果没有奖品,则输出另一条消息。

prize = None
if points <= 50:
    prize = "a wooden rabbit"
elif 151 <= points <= 180:
    prize = "a wafer-thin mint"
elif points >= 181:
    prize = "a penguin"

if prize:
    result = "Congratulations! You won " + prize + "!"
else:
    result = "Oh dear, no prize this time."

print(result)